import java.lang.*; import java.util.*; public class CreateThread extends Thread { private static Semaphore G1, G2, G3, G4, G5; private static Storage myStorage; private static DataCollection Data; private static Random rand0; private static System mySystem; public CreateThread(Semaphore gg1, Semaphore gg2, Semaphore gg3, Semaphore gg4, Semaphore gg5, Storage sto, DataCollection d, Random rand) { G1 = gg1; G2 = gg2; G3 = gg3; G4 = gg4; G5 = gg5; myStorage = sto; Data = d; rand0 = rand; } private static void interval() { double intervalTime = 200-100+2*100*rand0.nextFloat(); /* 0.2+-0.1 hour */ try { sleep((long)intervalTime); } catch (InterruptedException e) { System.out.println(e); } } public void run() { long startTime = 0; long endTime = 0; float jobType; TypeA type1; TypeB type2; TypeC type3; startTime = mySystem.currentTimeMillis(); for (int i=1; i<=8; i++) { jobType = rand0.nextFloat(); if (jobType<0.5) { type1 = new TypeA(G3, G1, G2, G5, myStorage, Data); type1.start(); } else if ((jobType>=0.5)&&(jobType<0.8)) { type2 = new TypeB(G4, G1, G3, myStorage, Data); type2.start(); } else { type3 = new TypeC(G2, G5, G1, G4, G3, myStorage, Data); type3.start(); } } endTime = mySystem.currentTimeMillis(); while ((endTime - startTime)<=200000) { jobType = rand0.nextFloat(); if (jobType<0.5) { type1 = new TypeA(G3, G1, G2, G5, myStorage, Data); type1.start(); } else if ((jobType>=0.5)&&(jobType<0.8)) { type2 = new TypeB(G4, G1, G3, myStorage, Data); type2.start(); } else { type3 = new TypeC(G2, G5, G1, G4, G3, myStorage, Data); type3.start(); } interval(); endTime = mySystem.currentTimeMillis(); } System.out.println("Simulation time is over..." ); System.out.println(" " ); System.out.println("------------------------- Simulation Results -------------------------" ); System.out.println(" " ); Data.Report(); System.out.println(" " ); System.out.println("Simulation is successful!!!" ); } }